クエリプランを可視化するBigQuery Visualiserを使ってみる
はじめに
データアナリティクス事業本部のkobayashiです。
BigQueryでクエリを実行する際にクエリプランを確認することでクエリチューニングを行いクエリを高速化することができます。その際に便利なツールとしてBigQuery Visualiser を使うことで簡単に視覚化ことができます。今回はこのツールを使ってみます。
BigQuery Visualiserとは
BigQuery VisualiserはオープンソースのツールでBigQueryで実行するジョブステージのフローを視覚化できるWebアプリケーションです。このツールを使うことでBigQueryウェブUIで確認することができるクエリプランツールよりも詳しく、また視覚化することで簡単にクエリの問題点を特定する事ができます。
An intelliJ plugin providing a UI layer for git-flow, which in itself is a collection of Git extensions to provide high-level repository operations for Vincent Driessen's branching model. - [professional-services/tools/bq-visualizer at master · GoogleCloudPlatform/professional-services · GitHub](https://github.com/GoogleCloudPlatform/professional-services/tree/master/tools/bq-visualizer
BigQuery Visualiserを使うには上記のリポジトリからソースをダウンロードしてきて使うこともできますが、今回は簡単に使ってみたいのですでに用意されているBqViz サービスを使ってみたいと思います。
- professional-services/tools/bq-visualizer at master · GoogleCloudPlatform/professional-services · GitHub
- BqViz
BqVizへBigQueryを連携する
BqViz でBigQueryのクエリプランを表示するにはプロジェクトを連携する必要があります。
手順1)BigQuery Visualiserにアクセスすると以下の画面になるので右上のlogin
を押下する。
手順2)アカウントの選択画面になるので連携するアカウントを確認して問題なければそのアカウントを押下する。
これでBigQuery VisualiserでBigQueryで実行したクエリが表示されるようになります。
クエリを表示するにはDownload from Google Cloud > Get Projects
で対象のGCPプロジェクトを選択したあとList Jobs
を押下すると最新のものから表示されます。
では実際にBigQuery Visualiserを使ってクエリプランを確認してみます。
BigQuery Visualiserでクエリプランを確認する
今回はBigQueryの一般公開データセットのGoogle Analytics Sample を使って、BigQuery について - アナリティクス ヘルプ にある複数の表を対象にクエリを作成する > 3 日間
の下記のクエリを実行して、その結果を見てみます。
#standardSQL WITH ga_tables AS ( SELECT date, SUM(totals.visits) AS visits, SUM(totals.pageviews) AS pageviews, SUM(totals.transactions) AS transactions, SUM(totals.transactionRevenue)/1000000 AS revenue FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20160801` GROUP BY date UNION ALL SELECT date, SUM(totals.visits) AS visits, SUM(totals.pageviews) AS pageviews, SUM(totals.transactions) AS transactions, SUM(totals.transactionRevenue)/1000000 AS revenue FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20160802` GROUP BY date UNION ALL SELECT date, SUM(totals.visits) AS visits, SUM(totals.pageviews) AS pageviews, SUM(totals.transactions) AS transactions, SUM(totals.transactionRevenue)/1000000 AS revenue FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20160803` GROUP BY date ) SELECT date, visits, pageviews, transactions, revenue, FROM ga_tables ORDER BY date ASC
先にBigQuery ウェブ UI で表示できるクエリプランを確認してみます。クエリエディタ画面下のクエリ結果にある実行の詳細
を押下します。
するとクエリプランとタイムラインが表示されます。
この画面の詳細は公式にドキュメントがあるのでご確認ください。
クエリプランとタイムライン | BigQuery | Google Cloud
では同じクエリをBigQuery Visualiserにて確認してみます。Select Job
から対象のクエリを選択します。
Tree表示とTiming表示
クエリプランの表示の仕方には2パターンあります。
- Tree表示
- 各ステージを有向グラフで視覚化する
- Timing表示
- 各ステージをガントチャートで視覚化する
グラフ部分の表示の違いはありますが、他の取得できる情報はどちらも同じですので状況に応じて使いやすい方を使えば良いと思います。
Tree表示の詳細
Tree表示では有向グラフが表示できるのでその内容を見てみます。
アイコン
グラフには2種類のアイコンがありますがDBアイコンはBigQueryのテーブルを表現し、その他のアイコンはクエリステージを表現しています。
今回のクエリですと3つのBigQueryのテーブルをデータソースとし、それぞれのテーブルから抽出したデータをUNION ALLしているのが2段めと3段目になります(S00,S01,S02,S03)。そしてUNION ALLしたものから最終的な出力を行っているのがS04になります。
クエリプランの情報
グラフ下部のペインには下記のようなクエリ全体の情報が表示されます。
- クエリの概要
- ジョブID、プロジェクト等
- 状態
- SQL
- 実行タイミング
- 統計情報
- 開始時間、終了時間、経過時間、スロット使用量、バイト数等
- 設定
- レガシーSQL、キャッシュ等
ステージ詳細・ステップ詳細
右側のペインにはステージの詳細とステップの詳細情報が表示されます。上図ではS00のステージを表示している状態です。
ステージの詳細には状態、読み込んだレコード数、書き込みバイト数、開始時間、終了時間、読み込み時間等のそのステージの情報が表示されます。
ステップの詳細にはステージ内で実行されるオペレーション(Reac,Write,Join等)ごとに処理内容が表示されます。
このステージ詳細・ステップ詳細の内容はBigQueryのドキュメントクエリプランとタイムライン の「クエリプランの情報」の項の「ステージ概要」「ステップ情報」と同一なので詳しくはドキュメントを確認してみてください。
Timing表示についてはクエリステージがガントチャートで表示される点が違うだけなので割愛します。
まとめ
BigQuery VisualiserでBigQueryで実行したクエリのクエリプランを確認してみました。BigQueryウェブUIで見る情報よりも視覚的にわかりやすいのでBigQueryを使ってみてクエリに問題がありそうな場合はBigQuery Visualiserをつかって問題点を探すことが有効だと思います。
最後まで読んで頂いてありがとうございました。